#include "LED_PWM.h"
 


void PWM_Init()
{
  P_SW1 &=0xCF; //切换为CCPn_2组引脚
  P_SW1 |=0x10; //CCP0_2=P35，CCP1_2=P36, CCP2_2=P37
  
  CMOD=0x0E;    //PWM时钟0.375Mhz,1.46khz,关闭计数溢出中断
  CCAPM0=0x02;  //PCA0,设置PWM模式
  CCAPM1=0x02;  //PCA1,设置PWM模式
  PCA_PWM0=0x00;//8位PWM模式，EPCOH=EPCOL=0
  PCA_PWM1=0x00;//8位PWM模式，EPCOH=EPCOL=0
 
  CL=CH=0;      //PCA计数值清零
  
  CCAP0H=CCAP0L=128-1; //初始化占空比为50%
  CCAP1H=CCAP1L=128-1; //初始化占空比为50%
   
  CCON=0x40;    //开始PCA阵列，中断标志位清零 
}
 
void Set_Pwm(unsigned char mode,unsigned char pwm)    //设置PWM占空比
{
  if(mode==0)
  {
    CCAP0H=pwm;
  }
  else if(mode==1)
  {
    CCAP1H=pwm;
  }
}

/**
 * @brief 控制LED开关及调节色温和亮度
 * @param LED_Mode 
 *        @arg 0  关灯模式
 *        @arg 1  开灯模式
 *        @arg 2  调节色温模式
 *        @arg 3  调节亮度模式
 * @param pwm_per   色温百分比参数
 * @param light_per 亮度百分比参数
 */

void PWM_LED(unsigned char LED_Mode, float pwm_per, float light_per)  //函数接口
{
  unsigned int pwm_data, light_data;
  pwm_data = pwm_per*255/100;
  light_data = light_per*255/100;

	if(LED_Mode == 0)		        //关灯（全部）
	{
			Set_Pwm(0, 0);
			Set_Pwm(1, 0);
	}
  
  else if(LED_Mode == 1)		  //开灯（全部）
	{
			Set_Pwm(0, 127);
			Set_Pwm(1, 127);    
	}

  else if(LED_Mode == 2)		  //调节色温（蓝牙、小程序）
	{
		  Set_Pwm(0, pwm_data);
		  Set_Pwm(1, 255-pwm_data);
	}

  else if(LED_Mode == 3)		   //调节亮度（蓝牙、小程序）
	{
      Set_Pwm(0,pwm_data/light_data);
      Set_Pwm(1,(255-pwm_data)/light_data);
	}
}